if fd == child.fromchild.fileno():
l = child.fromchild.readline()
if l.rstrip() == "suspend":
- log.info("suspending %s" % dominfo.id)
+ log.info("suspending %d" % dominfo.id)
xd.domain_shutdown(dominfo.id, reason='suspend')
dominfo.state_wait("suspended")
- log.info("suspend %s done" % dominfo.id)
+ log.info("suspend %d done" % dominfo.id)
child.tochild.write("done\n")
child.tochild.flush()
if filter(lambda (fd, event): event & select.POLLHUP, r):
"""
import errno
import os
-import scheduler
-import string
import sys
-import traceback
import time
+import traceback
import xen.lowlevel.xc; xc = xen.lowlevel.xc.new()
-from xen.xend.server import relocate
-import sxp
-import XendRoot; xroot = XendRoot.instance()
-import XendCheckpoint
-import XendDB
+from xen.xend import sxp
+from xen.xend import XendRoot; xroot = XendRoot.instance()
+from xen.xend import XendCheckpoint
from xen.xend.XendDomainInfo import XendDomainInfo, shutdown_reason
-import EventServer; eserver = EventServer.instance()
-from XendError import XendError
-from XendLogging import log
-
+from xen.xend import EventServer; eserver = EventServer.instance()
+from xen.xend.XendError import XendError
+from xen.xend.XendLogging import log
+from xen.xend import scheduler
from xen.xend.server import channel
+from xen.xend.server import relocate
+from xen.xend import XendDB
__all__ = [ "XendDomain" ]
# So we stuff the XendDomain instance (self) into xroot's components.
xroot.add_component("xen.xend.XendDomain", self)
self.domains = XendDomainDict()
- # Table of domain info indexed by domain id.
self.db = XendDB.XendDB(self.dbpath)
eserver.subscribe('xend.virq', self.onVirq)
self.initial_refresh()
info = self.domains.get(id)
if info:
del self.domains[id]
+ self.db.delete(str(id))
if notify:
eserver.inject('xend.domain.died', [info.name, info.id])
- self.db.delete(str(id))
def reap(self):
"""Look for domains that have crashed or stopped.
casualties.append(d)
for d in casualties:
id = d['dom']
- #print 'reap>', id
dominfo = self.domains.get(id)
name = (dominfo and dominfo.name) or '??'
if dominfo and dominfo.is_terminated():
- #print 'reap> already terminated:', id
continue
log.debug('XendDomain>reap> domain died name=%s id=%d', name, id)
if d['shutdown']:
@return: domain
"""
dominfo = XendDomainInfo.create(config)
+ self._add_domain(dominfo)
return dominfo
def domain_restart(self, dominfo):
"""Configure an existing domain. This is intended for internal
use by domain restore and migrate.
- @param id: domain id
@param vmconfig: vm configuration
"""
config = sxp.child_value(vmconfig, 'config')
dominfo = XendDomainInfo.restore(config)
self._add_domain(dominfo)
return dominfo
-
+
def domain_restore(self, src, progress=False):
"""Restore a domain from file.
@param id: domain id
@param devconfig: device configuration
- @param devid: device index
+ @param devid: device id
@return: updated device configuration
"""
dominfo = self.domain_lookup(id)
"""Refresh a device.
@param id: domain id
- @param devid: device index
+ @param devid: device id
@param type: device type
"""
dominfo = self.domain_lookup(id)
"""Destroy a device.
@param id: domain id
- @param devid: device index
+ @param devid: device id
@param type: device type
"""
dominfo = self.domain_lookup(id)
def domain_devtype_get(self, id, type, devid):
"""Get a device from a domain.
-
+
@param id: domain
@param type: device type
- @param devid: device index
+ @param devid: device id
@return: device object (or None)
"""
dominfo = self.domain_lookup(id)
import threading
import xen.lowlevel.xc; xc = xen.lowlevel.xc.new()
-import xen.util.ip
-from xen.xend.server import channel, controller
+from xen.util.ip import check_subnet, get_current_ipgw
from xen.util.blkif import blkdev_uname_to_file
-from server.channel import channelFactory
-import server.SrvDaemon; xend = server.SrvDaemon.instance()
-from server import messages
+from xen.xend.server import channel, controller
+from xen.xend.server import SrvDaemon; xend = SrvDaemon.instance()
+from xen.xend.server import messages
+from xen.xend.server.channel import channelFactory
+from xen.xend import sxp
+from xen.xend.PrettyPrint import prettyprintstring
from xen.xend.XendBootloader import bootloader
-import sxp
-from XendLogging import log
+from xen.xend.XendLogging import log
from XendError import XendError, VmError
-from XendRoot import get_component
-
-from PrettyPrint import prettyprintstring
+from xen.xend.XendRoot import get_component
"""Flag for a block device backend domain."""
SIF_BLK_BE_DOMAIN = (1<<4)
def get_device_handler(name):
return device_handlers[name]
-
def dom_get(dom):
"""Get info from xen for an existing domain.
def __str__(self):
s = "domain"
- s += " id=" + self.id
+ s += " id=" + str(self.id)
s += " name=" + self.name
s += " memory=" + str(self.memory)
console = self.getConsole()
import relocate
from params import *
-DAEMONIZE = 0
-DEBUG = 1
-
class Daemon:
"""The xend daemon.
"""
"""
import string
-from xen.xend import sxp
-from xen.xend import Blkctl
-from xen.xend.XendError import XendError, VmError
-from xen.xend.XendLogging import log
from xen.util import blkif
+from xen.xend.XendError import XendError, VmError
from xen.xend.XendRoot import get_component
+from xen.xend.XendLogging import log
+from xen.xend import sxp
+from xen.xend import Blkctl
-import channel
-from controller import CtrlMsgRcvr, Dev, DevController
-from messages import *
+from xen.xend.server import channel
+from xen.xend.server.controller import CtrlMsgRcvr, Dev, DevController
+from xen.xend.server.messages import *
class BlkifBackend:
""" Handler for the 'back-end' channel to a block device driver domain
from xen.xend import XendRoot; xroot = XendRoot.instance()
from xen.xend import sxp
-from controller import CtrlMsgRcvr, Dev, DevController
-from messages import *
-from params import *
+from xen.xend.server.controller import CtrlMsgRcvr, Dev, DevController
+from xen.xend.server.messages import *
+from xen.xend.server.params import *
class ConsoleProtocol(protocol.Protocol):
"""Asynchronous handler for a console socket.
"""
from xen.xend.XendError import XendError
-from messages import msgTypeName, printMsg, getMessageType
+from xen.xend.server.messages import msgTypeName, printMsg, getMessageType
DEBUG = 0
from xen.xend import XendVnet
from xen.xend.XendRoot import get_component
-import channel
-from controller import CtrlMsgRcvr, Dev, DevController
-from messages import *
+from xen.xend.server import channel
+from xen.xend.server.controller import CtrlMsgRcvr, Dev, DevController
+from xen.xend.server.messages import *
class NetDev(Dev):
"""A network device.
from xen.xend.XendLogging import log
from xen.xend.XendError import XendError
-import channel
-from controller import Dev, DevController
-from messages import *
+from xen.xend.server import channel
+from xen.xend.server.controller import Dev, DevController
+from xen.xend.server.messages import *
class UsbBackend:
"""Handler for the 'back-end' channel to a USB device driver domain